package com.stu.day06;

import java.util.Arrays;
import java.util.Comparator;

/**
 * @author zy
 * @date 2025/1/27 17:54
 */
public class EmpService {

    // 上司增加员工手下
    public void addEmployee(Emp boss, Emp employee) {
        if (boss.getEmp() == null) {
            boss.setEmp(new Emp[] { employee });
        } else {
            // 如果boss已经有员工手下, 扩展数组, 并加入新员工
            Emp[] currentEmps = boss.getEmp();
            Emp[] newEmps = Arrays.copyOf(currentEmps, currentEmps.length + 1);
            newEmps[currentEmps.length] = employee;
            boss.setEmp(newEmps);
        }
    }

    // 上司根据ID删除员工
    public void removeEmployee(Emp boss, int employeeId) {
        if (boss.getEmp() == null) {
            System.out.println(boss.getName() + "没有下属");
            return;
        }

        Emp[] currentEmps = boss.getEmp();
        boolean found = false;
        for (int i = 0; i < currentEmps.length; i++) {
            if (currentEmps[i].getId() == employeeId) {
                found = true;
                // 删除员工，使用数组的前移操作
                Emp[] newEmps = new Emp[currentEmps.length - 1];
                System.arraycopy(currentEmps, 0, newEmps, 0, i);
                System.arraycopy(currentEmps, i + 1, newEmps, i, currentEmps.length - i - 1);
                boss.setEmp(newEmps);
                break;
            }
        }
        if (!found) {
            System.out.println("员工ID为 " + employeeId + " 的员工不存在");
        }
    }

    // 打印上司的所有员工
    public void printEmployees(Emp boss) {
        if (boss.getEmp() == null || boss.getEmp().length == 0) {
            System.out.println(boss.getName() + "没有下属");
            return;
        }

        System.out.println(boss.getName() + " 的下属：");
        for (Emp employee : boss.getEmp()) {
//            System.out.println("员工姓名: " + employee.getName() + ", 薪资: " + employee.getSalary());
            System.out.println(employee);
        }
    }

    // 按工资排序员工
    public void sortEmployeesBySalary(Emp boss) {
        if (boss.getEmp() == null || boss.getEmp().length == 0) {
            System.out.println(boss.getName() + "没有下属，无法排序");
            return;
        }

        Emp[] employees = boss.getEmp();
//        Arrays.sort(employees, Comparator.comparingDouble(Emp::getSalary)); // 按薪资升序排列
        // 因为本类没继承Comparator接口重写compare方法,所以用匿名内部类实现
        Arrays.sort(employees,new Comparator<Emp>() {
            @Override
            public int compare(Emp o1, Emp o2) {
                if (o1.getSalary() > o2.getSalary()) {
                    return 1;
                }
                if (o1.getSalary() < o2.getSalary()) {
                    return -1;
                }
                return 0;
            }
        });
//        Arrays.sort(employees, (o1, o2) -> {
//            if (o1.getSalary() > o2.getSalary()) {
//                return 1;
//            }
//            if (o1.getSalary() < o2.getSalary()) {
//                return -1;
//            }
//            else{
//                return o1.getName().compareTo(o2.getName());  // 工资相等则按姓名排序
//            }
//        });
        boss.setEmp(employees);
        System.out.println("员工已按薪资排序：");
        printEmployees(boss);
    }
}
